// 在 H.264 和 H.265 视频编码标准中，ANEX-B 格式的 NALU（Network Abstraction Layer Unit，网络抽象层单元）
// 以 0x00 0x00 0x00 0x01 作为起始码，用于标识一个 NALU 的开始。
pub const ANNEXB_NALU_START_CODE: [u8; 4] = [0x00, 0x00, 0x00, 0x01];

// RTP（Real - Time Transport Protocol，实时传输协议）数据包中携带的 NALU 的类型。
pub type RtpNalType = u8;

// 以下是 H.264 视频编码标准中 RTP 数据包携带的特殊 NALU 类型的常量定义

// STAP_A 类型的 NALU，代表 Single-time aggregation packet type A（单时间聚合包类型 A）。
// 它用于将多个较小的 NALU 聚合到一个 RTP 数据包中进行传输，以提高传输效率。
pub const STAP_A: RtpNalType = 24;

// STAP_B 类型的 NALU，代表 Single-time aggregation packet type B（单时间聚合包类型 B）。
// 与 STAP_A 类似，但可能在处理时间戳等方面有不同的规则。
pub const STAP_B: RtpNalType = 25;

// MTAP_16 类型的 NALU，代表 Multi-time aggregation packet with 16-bit offsets（带 16 位偏移的多时间聚合包）。
// 用于聚合多个 NALU，并且每个 NALU 带有 16 位的时间偏移信息。
pub const MTAP_16: RtpNalType = 26;

// MTAP_24 类型的 NALU，代表 Multi-time aggregation packet with 24-bit offsets（带 24 位偏移的多时间聚合包）。
// 与 MTAP_16 类似，但时间偏移信息使用 24 位表示。
pub const MTAP_24: RtpNalType = 27;

// FU_A 类型的 NALU，代表 Fragmentation Unit type A（分片单元类型 A）。
// 当一个 NALU 太大无法放入一个 RTP 数据包时，会使用 FU_A 类型将其分割成多个片段进行传输。
pub const FU_A: RtpNalType = 28;

// FU_B 类型的 NALU，代表 Fragmentation Unit type B（分片单元类型 B）。
// 也是用于分割大的 NALU，但与 FU_A 在处理上可能存在一些差异。
pub const FU_B: RtpNalType = 29;

// 以下是 H.265 视频编码标准中 RTP 数据包携带的特殊 NALU 类型的常量定义

// AP 类型的 NALU，代表 Aggregation Packets（聚合包）。
// 在 H.265 中用于将多个较小的 NALU 聚合到一个 RTP 数据包中传输。
pub const AP: RtpNalType = 48;

// FU 类型的 NALU，代表 Fragmentation Units（分片单元）。
// 当一个 H.265 的 NALU 太大无法放入一个 RTP 数据包时，使用 FU 类型将其分割成多个片段传输。
pub const FU: RtpNalType = 49;

// PACI 类型的 NALU，代表 Payload Content Information（有效负载内容信息）。
// 用于携带与 RTP 数据包有效负载内容相关的信息。
pub const PACI: RtpNalType = 50;

// FU_START 常量，它是一个 u8 类型的值 0x80。
// 在 FU（分片单元）类型的 RTP 数据包中，这个标志位用于表示该分片是一个 NALU 的起始分片。
pub const FU_START: u8 = 0x80;

// 在 FU（分片单元）类型的 RTP 数据包中，这个标志位用于表示该分片是一个 NALU 的结束分片。
pub const FU_END: u8 = 0x40;

/// RTP_FIXED_HEADER_LEN 常量
pub const RTP_FIXED_HEADER_LEN: usize = 12;
